package com.demon.auto.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.demon.auto.model.dto.SignClientDto;
import com.demon.auto.model.entity.SignClientEntity;
import com.demon.auto.model.vo.PageVo;
import com.demon.auto.model.vo.SignClientVo;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 签到客户端
 *
 * @version 1.0
 * @author huangrz
 * @date 2025/02/13 17:06
 */
public interface SignClientService extends IService<SignClientEntity> {

    /**
     * 更新在线时间
     * @param clientName    客户端名称
     * @param localDateTime 在线时间
     * @return boolean
     */
    Boolean updateOnlineTime(String clientName, LocalDateTime localDateTime);

    /**
     * 获取所有启用的客户端
     * @return List<SignClientDto>
     */
    List<SignClientDto> getAllOpenSignClientList();

    /**
     * 根据客户端名称获取客户端信息
     * @param clientName 客户端名称
     * @return SignClientDto
     */
    SignClientDto getSignClientByClientName(String clientName);

    /**
     * 获取用户关联的签到客户端
     * @param userId 用户ID
     * @return List<SignClientDto>
     */
    List<SignClientDto> getUserSignClient(Long userId);

    /**
     * 保存用户签到客户端
     * @param signClient 签到客户端信息
     * @return boolean
     */
    Boolean saveUserSignClient(SignClientDto signClient);

    /**
     * 分页查询
     * @param condition 查询条件
     * @return PageVo<SignClientEntity>
     */
    PageVo<SignClientEntity> queryByPage(SignClientVo condition);

    /**
     * 判断客户端名称是否已存在
     * @param clientName 客户端名称
     * @return boolean
     */
    boolean judgeClientNameIsExist(String clientName);

    /**
     * 修改定时任务签到时间
     *
     * @param clientName   客户端名称
     * @param autoSignTime 定时任务签到时间
     */
    void updateAutoSignTime(String clientName, LocalDateTime autoSignTime);

    /**
     * 作废用户客户端
     * @param clientId  客户端ID
     * @param userId    用户ID
     * @return boolean
     */
    boolean invalidUserClient(Long clientId, Long userId);

}
